//
//  ApiErrorCode.m
//  efairy
//
//  Created by XiangDongMBP on 2017/7/26.
//  Copyright © 2017年 East. All rights reserved.
//

#import "ApiErrorCode.h"
#import <AFNetworking.h>
#import "GlobalHeader.h"

@interface ApiErrorCode ()
@property (nonatomic, strong) NSDictionary<NSString *, NSString *> *errDic;
@end

@implementation ApiErrorCode
- (NSDictionary<NSString *,NSString *> *)errDic {
    if (!_errDic) {
        _errDic = @{@"9527" : @"账号异常，请联系管理员",
                    
                    @"10001" : @"参数错误",
                    @"10002" : @"用户不存在",
                    @"10003" : @"验证码错误",
                    @"10004" : @"数据库初始化错误",
                    @"10005" : @"获取用户信息失败",
                    @"10006" : @"创建密钥错误",
                    @"10007" : @"生成accessToken错误",
                    @"10008" : @"初始化Redis出错",
                    @"10009" : @"获取验证码失败",
                    @"10010" : @"鉴权失败，请重新登录",
                    @"50007" : @"鉴权失败，请重新登录",
                    @"10011" : @"请重新登录",
                    @"10012" : @"获取权限数据失败",
                    @"10013" : @"没有权限",
                    @"10014" : @"获取项目信息失败",
                    @"10015" : @"获取设备信息失败",
                    @"10016" : @"获取角色信息失败",
                    @"10017" : @"设备不存在",
                    @"10018" : @"验证码未失效",
                    @"10019" : @"获取设备历史数据失败",
                    @"10020" : @"设备历史数据不存在",
                    @"10021" : @"获取融云token失败",
                    @"10022" : @"获取消息总数失败",
                    @"10023" : @"获取消息列表失败",
                    @"10024" : @"插入消息失败",
                    @"10025" : @"获取消息失败",
                    @"10026" : @"新增用户失败",
                    @"10027" : @"新增项目失败",
                    @"10028" : @"添加设备到项目中失败",
                    @"10029" : @"给用户分配角色失败",
                    @"10030" : @"获取平台维护费用列表失败",
                    @"10031" : @"编辑用户信息失败",
                    @"10032" : @"获取项目人数失败",
                    @"10033" : @"获取编译号失败",
                    @"10034" : @"添加设备到用户中失败",
                    @"10035" : @"获取用户拥有的设备失败",
                    @"10036" : @"给用户分配项目失败",
                    @"10037" : @"获取项目管理员人数失败",
                    @"10038" : @"项目不存在",
                    @"10039" : @"添加用户失败",
                    @"10040" : @"获取项目中的用户失败",
                    @"10041" : @"添加用户到项目中失败",
                    @"10042" : @"生成用户配置文件失败",
                    @"10043" : @"获取火警数据失败",
                    @"10044" : @"编辑项目失败",
                    @"10045" : @"删除项目中的用户失败",
                    @"10046" : @"删除用户拥有设备失败",
                    @"10047" : @"删除项目中的设备失败",
                    @"10048" : @"获取用户拥有项目失败",
                    @"10049" : @"删除用户拥有项目失败",
                    @"10050" : @"给用户分配设备失败",
                    @"10051" : @"将用户从项目中移除失败",
                    @"10052" : @"分配项目给用户失败",
                    @"10053" : @"获取项目含用户标志设备列表失败",
                    @"10054" : @"获取项目不含用户标志设备列表失败",
                    @"10055" : @"查看项目中的设备失败",
                    @"10056" : @"设备唯一编号格式错误",
                    
                    @"10059" : @"获取设备配置失败",
                    @"10060" : @"更新设备配置失败",
                    @"10061" : @"发送公告失败",
                    
                    @"10063" : @"获取公告失败",
                    @"10064" : @"删除公告失败",
                    @"10065" : @"无法删除上级管理员",
                    @"10066" : @"添加公告对应项目失败",
                    @"10067" : @"添加用户对应公告失败",
                    @"10068" : @"获取用户对应公告失败",
                    @"10069" : @"获取公告图片失败",
                    @"10071" : @"公告不存在",
                    @"10072" : @"设置公告已读失败",
                    @"10073" : @"发布维护记录失败",
                    @"10074" : @"获取维护记录失败",
                    @"10075" : @"存储维护记录图片失败",
                    @"10076" : @"删除维护记录失败",
                    @"10077" : @"发布报警维护记录失败",
                    @"10078" : @"发布报警维护记录图片失败",
                    @"10079" : @"更新设备消息列表失败",
                    @"10080" : @"获取报警维护记录失败",
                    @"10081" : @"获取报警维护记录图片失败",
                    @"10082" : @"获取设备未处理报警失败",
                    @"10083" : @"消息不存在",
                    @"10084" : @"反馈失败",
                    @"10085" : @"获取反馈失败",
                    @"10086" : @"存储反馈图片失败",
                    @"10087" : @"删除项目失败",
                    @"10088" : @"获取物联网卡号失败",
                    @"10089" : @"删除用户角色失败",
                    @"10090" : @"物联网卡信息更新失败",
                    @"10091" : @"设备已存在，请勿重新添加",
                    @"10092" : @"编辑设备失败，卡号已被使用"
                    };
    }
    return _errDic;
}

+ (instancetype)sharedInstance {
    static ApiErrorCode * sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

- (NSString *)errorCodeMsgWithError:(NSError *)error {
    NSHTTPURLResponse *response = error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey];
    NSDictionary *dic = response.allHeaderFields;
    NSString *msg = dic[@"msg"];
    if (msg) {
        NSData *data = [[NSData alloc] initWithBase64EncodedString:msg options:NSDataBase64DecodingIgnoreUnknownCharacters];
        msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
    NSString *err_code = dic[@"err-code"];
    if (!msg) {
        if (err_code) {
            msg = self.errDic[err_code];
            if (!msg) {
                msg = [NSString stringWithFormat:@"没有找到对应的错误信息(%@)", err_code];
            }
        } else {
            msg = error.localizedDescription;
        }
    }
    // 对需要重新登录的进行特殊处理
    if ([err_code isEqualToString:@"10010"] || [err_code isEqualToString:@"10011"] || [err_code isEqualToString:@"50007"]) {
        [[NSNotificationCenter defaultCenter] postNotificationName:EFAGlobalNotiUserTokenInvalid object:nil];
    }
    return msg;
}
@end
